/*
 *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *
 *  Redistributions of source code must retain the above copyright notice,
 *  this list of conditions and the following disclaimer.
 *  Redistributions in binary form must reproduce the above copyright
 *  notice, this list of conditions and the following disclaimer in the
 *  documentation and/or other materials provided with the distribution.
 *  Neither the name of the dreamlu.net developer nor the names of its
 *  contributors may be used to endorse or promote products derived from
 *  this software without specific prior written permission.
 *  Author: Chill 庄骞 (smallchill@163.com)
 */
package org.springblade.modules.enterprise.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.AllArgsConstructor;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
import org.springblade.modules.enterprise.entity.CompanyBasicInf;
import org.springblade.modules.enterprise.service.ICompanyBasicInfService;
import org.springblade.modules.enterprise.service.IIndexService;
import org.springblade.modules.enterprise.vo.CompanyBasicInfVO;
import org.springblade.modules.enterprise.vo.ReadForAppVO;
import org.springblade.modules.enterprise.wrapper.CompanyBasicInfWrapper;
import org.springblade.modules.resource.entity.EsmsUser;
import org.springblade.modules.resource.service.IEsmsUserService;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

/**
 * 控制器
 *
 * @author BladeX
 * @since 2021-07-28
 */
@RestController
@AllArgsConstructor
@RequestMapping("enterprise/companybasicinf")
@Api(value = "企业信息配置", tags = "企业信息配置")
public class CompanyBasicInfController extends BladeController {

	private final ICompanyBasicInfService companyBasicInfService;
	private final IEsmsUserService esmsUserService;
	private final IIndexService indexService;
	/**
	 * 详情
	 */
	@GetMapping("/detail")
	@ApiOperationSupport(order = 1)
	@ApiOperation(value = "获取企业信息", notes = "必须登录")
	public R<CompanyBasicInfVO> detail() {
		// 获取当前租户ID
		BladeUser user = AuthUtil.getUser();
		// 获取企业信息
		CompanyBasicInf companyBasicInf = companyBasicInfService.getOne(new QueryWrapper<CompanyBasicInf>().eq("user_name	", user.getAccount()));
		CompanyBasicInf detail = new CompanyBasicInf();
		if (companyBasicInf == null) {
			if (detail.getUserName() == null) {

				EsmsUser esmsUser = esmsUserService.getOne(new QueryWrapper<EsmsUser>().eq("account", user.getAccount()).eq("ac_type", 1));
				detail.setUserId(esmsUser.getId());
				detail.setUserName(esmsUser.getAccount());
				detail.setCompanyName(esmsUser.getOrgName());
				detail.setCreditCode(esmsUser.getUscCode());
				detail.setCompanyType(esmsUser.getOrgTypeName());
				detail.setLegalRepresentative(esmsUser.getName());
				detail.setPhone(esmsUser.getBindPhone());
				detail.setContactAddress(esmsUser.getAddressDetail());
				return R.data(CompanyBasicInfWrapper.build().entityVO(detail));
			}
		}
		if (Func.isNotEmpty(companyBasicInf)) {
			return R.data(CompanyBasicInfWrapper.build().entityVO(companyBasicInf));
		}
		return R.data(null);
	}
	/**
	 * 详情
	 */
	@GetMapping("/detailForApp")
	@ApiOperationSupport(order = 1)
	@ApiOperation(value = "获取企业信息", notes = "必须登录")
	public R<CompanyBasicInfVO> detailForApp(String account) {
		// 获取企业信息
		CompanyBasicInf companyBasicInf = companyBasicInfService.getOne(new QueryWrapper<CompanyBasicInf>().eq("user_name",account));
		if (Func.isNotEmpty(companyBasicInf)) {
			return R.data(CompanyBasicInfWrapper.build().entityVO(companyBasicInf));
		}
		return R.fail("没有查到对应密匙的企业信息！");
	}
	/**
	 * 分页
	 */
	@GetMapping("/list")
	@ApiOperationSupport(order = 2)
	@ApiOperation(value = "分页", notes = "传入companyBasicInf")
	public R<IPage<CompanyBasicInfVO>> list(CompanyBasicInf companyBasicInf, Query query) {
		IPage<CompanyBasicInf> pages = companyBasicInfService.page(Condition.getPage(query), Condition.getQueryWrapper(companyBasicInf));
		return R.data(CompanyBasicInfWrapper.build().pageVO(pages));
	}


	/**
	 * 自定义分页
	 */
	@GetMapping("/page")
	@ApiOperationSupport(order = 3)
	@ApiOperation(value = "分页", notes = "传入companyBasicInf")
	public R<IPage<CompanyBasicInfVO>> page(CompanyBasicInfVO companyBasicInf, Query query) {
		IPage<CompanyBasicInfVO> pages = companyBasicInfService.selectCompanyBasicInfPage(Condition.getPage(query), companyBasicInf);
		return R.data(pages);
	}

	/**
	 * 新增
	 */
	@PostMapping("/save")
	@ApiOperationSupport(order = 4)
	@ApiOperation(value = "保存", notes = "传入companyBasicInf")
	public R save(@Valid @RequestBody CompanyBasicInf companyBasicInf) {
		return R.status(companyBasicInfService.save(companyBasicInf));
	}

	/**
	 * 修改
	 */
	@PostMapping("/update")
	@ApiOperationSupport(order = 5)
	@ApiOperation(value = "修改", notes = "传入companyBasicInf")
	public R update(@Valid @RequestBody CompanyBasicInf companyBasicInf) {
		return R.status(companyBasicInfService.updateById(companyBasicInf));
	}

	/**
	 * 新增或修改
	 */
	@PostMapping("/submit")
	@ApiOperationSupport(order = 6)
	@ApiOperation(value = "新增或修改", notes = "传入companyBasicInf")
	public R submit(@Valid @RequestBody CompanyBasicInf companyBasicInf) {



		String id = companyBasicInf.getId().toString();
		if (id == "-1" || id.equals("-1")) {
			return R.status(companyBasicInfService.save(companyBasicInf));
		}
		return R.status(companyBasicInfService.saveOrUpdate(companyBasicInf));
	}


	/**
	 * 删除
	 */
	@PostMapping("/remove")
	@ApiOperationSupport(order = 7)
	@ApiOperation(value = "逻辑删除", notes = "传入ids")
	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
		return R.status(companyBasicInfService.deleteLogic(Func.toLongList(ids)));
	}

	@ApiOperation("所有企业浏览政策总数")
	@GetMapping("/policy-look-count")
	public R<Integer> getPolicyLookCount() {
		Integer count = companyBasicInfService.policyLookCount();
		return R.data(count);
	}

	@ApiOperation(value = "总记录数")
	@GetMapping("count")
	public R<Integer> count() {
		return R.data(companyBasicInfService.count());
	}

	@ApiOperation(value = "反馈数量")
	@GetMapping("feedbackCount")
	public R<ReadForAppVO> feedbackCount(String enterpriseAccount) {

		return R.data(indexService.getReadForApp(enterpriseAccount));
	}


}
